﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using Entidades;
using System.Data;
using System.Data.Common;

namespace DAO
{
    public class ProyectoDAO : DAOBase
    {
        private const string InsertProcedure = "PR_PROYECTO_I";
        private const string UpdateProcedure = "PR_PROYECTO_U";
        private const string SelectProcedure = "PR_PROYECTO_S";
        private const string SelectAllProcedure = "PR_PROYECTO_SA";
        private const string DeleteProcedure = "PR_PROYECTO_D"; 

		public ProyectoDAO() : base() {}

        #region VirtualProcedures

        public override string obtainInsertProcedure()
        {
            return InsertProcedure;
        }

        public override string obtainDeleteProcedure()
        {
            return DeleteProcedure;
        }

        public override string obtainUpdateProcedure()
        {
            return UpdateProcedure;
        }

        public override string obtainSelectProcedure()
        {
            return SelectProcedure;
        }

        public override string obtainSelectAllProcedure()
        {
            return SelectAllProcedure;
        }

        #endregion

        #region IDAO Members

        public override void cargarEntidad(EntidadBase entidad, IDataReader reader)
        {
            EntidadProyecto proyecto = (EntidadProyecto)entidad;
            object tempValue;
            // Campo Id
            proyecto.Id = Convert.ToInt32(reader["id_proyecto"]);
            // Resto de campos
            tempValue = reader["nombre"];
            if (tempValue.Equals(DBNull.Value))
            {
                proyecto.Nombre = "";
            }
            else
            {
                proyecto.Nombre = Convert.ToString(tempValue);
            }

            tempValue = reader["descripcion"];
            if (tempValue.Equals(DBNull.Value))
            {
                proyecto.Descripcion = "";
            }
            else
            {
                proyecto.Descripcion = Convert.ToString(tempValue);
            }

            tempValue = reader["sitioWeb"];
            if (tempValue.Equals(DBNull.Value))
            {
                proyecto.SitioWeb = "";
            }
            else
            {
                proyecto.SitioWeb = Convert.ToString(tempValue);
            }

            tempValue = reader["mail"];
            if (tempValue.Equals(DBNull.Value))
            {
                proyecto.Mail = "";
            }
            else
            {
                proyecto.Mail = Convert.ToString(tempValue);
            }

            tempValue = reader["fechaInicio"];
            if (tempValue.Equals(DBNull.Value))
            {
                proyecto.FechaInicio = null;
            }
            else
            {
                proyecto.FechaInicio = Convert.ToDateTime(tempValue);
            }

            tempValue = reader["fechaFin"];
            if (tempValue.Equals(DBNull.Value))
            {
                proyecto.FechaFin = null;
            }
            else
            {
                proyecto.FechaFin = Convert.ToDateTime(tempValue);
            }

            tempValue = reader["tiempoEstimadoMeses"];
            if (tempValue.Equals(DBNull.Value))
            {
                proyecto.TiempoEstimadoMeses = 0;
            }
            else
            {
                proyecto.TiempoEstimadoMeses = Convert.ToInt32(tempValue);
            }

            tempValue = reader["fk_id_investigadorLider"];
            if (tempValue.Equals(DBNull.Value))
            {
                proyecto.InvestigadorLider.Id = 0;
            }
            else
            {
                proyecto.InvestigadorLider.Id = Convert.ToInt32(tempValue);
            }

            //TODO: como manejamos la carga de ralaciones???
        }

        public override List<EntidadBase> cargar(IDataReader reader)
        {
            // Creo la lista vacia
            List<EntidadBase> listaEntidades = new List<EntidadBase>();
            // Itero en el data reader y cargo los datos basicos
            while (reader.Read())
            {
                EntidadProyecto entity = new EntidadProyecto();
                cargarEntidad(entity, reader);
                listaEntidades.Add(entity);
            }

            reader.Close();

            return listaEntidades;
        }

        #endregion
    }
}
